﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//void test()
//{
//	 int a = 1;
//	a++;
//	printf("%d ", a);
//}
//
//int main()
//{
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		test();  // 2 2 2 2 2
//	}
//	return 0;
//}
//void test()
//{
//	static int a = 1;   //static 修饰局部变量
//	//static修饰局部变量改变了变量的⽣命周期，⽣命周期改变的本质是改变了变量的存储类型，本
//	//来⼀个局部变量是存储在内存的栈区的，
//	//  但是被 static 修饰后存储到了静态区。存储在静态区的变量和全局变量是⼀样的，
//	// 其实编译器在编译代码的时候，就为静态变量分配了地址，而不是进入函数创建这种变量
//	// ⽣命周期就和程序的⽣命周期⼀样了，只有程序结束，变量才销毁，内存才回收
//	//。但是作⽤域不变的。
//	a++;
//	printf("%d ", a);
//}
//
//int main()
//{
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		test();  // 2 3 4 5 6
//	}
//	return 0;
//}


//int g_val = 2024;//创建一个全局变量
//我再创建一个源文件去写这个全局变量

//extern int g_val;
//int main()
//{
//	printf("%d\n", g_val); //不能使用，原因是编译器在编译的时候是单独编译的
//	//变量在使用前也要声明一下 extern int g_val  这样就能使用了 但是另一个文件必须要存在这个变量
//	// 不然编译器就觉得我们骗了它还是会运行失败
//	// 全局变量默认是带有外部链接属性的
//	//2024就出来了
//
//	return 0;
//}


//extern int Add(int, int);
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	
//	int c = Add(a, b);  //只要声明外部符号就可以了
//	//函数也具有外部链接属性，只要在其他的.c文件中正确的声明，也是可以直接使用的
//	printf("c=%d\n", c);
//	return 0;
//}

//extern 是⽤来声明外部符号的，如果⼀个全局的符号在A⽂件中定义的，在B⽂件中想使⽤，就可以使
//⽤ extern 进⾏声明，然后使⽤。


